{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# How to use PyTorch"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Pytorch has been developed at the Facebook AI Research group led by Yann LeCunn and the first alpha version released in September 2016. It provides deep integration with Python libraries like Numpy that can be used to extend its functionality, strong GPU acceleration, and automatic differentiation using its autograd system. It provides more granular control than Keras through a lower-level API and is mainly used as a deep learning research platform but can also replace NumPy while enabling GPU computation.\n",
    "\n",
    "It employs eager execution, in contrast to the static computation graphs used by, e.g., Theano or TensorFlow. Rather than initially defining and compiling a network for fast but static execution, it relies on its autograd package for automatic differentiation of Tensor operations, i.e., it computes gradients ‘on the fly’ so that network structures can be partially modified more easily. This is called define-by-run, meaning that backpropagation is defined by how your code runs, which in turn implies that every single iteration can be different. The PyTorch documentation provides a detailed tutorial on this.\n",
    "\n",
    "- [PyTorch Documentation](https://pytorch.org/docs)\n",
    "- [PyTorch Tutorials](https://pytorch.org/tutorials)\n",
    "\n",
    "The resulting flexibility combined with an intuitive Python-first interface and speed of execution have contributed to its rapid rise in popularity and led to the development of numerous supporting libraries that extend its functionality."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Imports & Settings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:25.568456Z",
     "start_time": "2019-01-11T04:10:25.566538Z"
    }
   },
   "outputs": [],
   "source": [
    "import warnings\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:25.585959Z",
     "start_time": "2019-01-11T04:10:25.569900Z"
    }
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn.metrics import accuracy_score\n",
    "from sklearn.datasets import make_circles\n",
    "\n",
    "import torch\n",
    "import torch.utils.data as utils\n",
    "import torch.nn as nn\n",
    "from torch.autograd import Variable\n",
    "from matplotlib.colors import ListedColormap\n",
    "import matplotlib.pyplot as plt\n",
    "from livelossplot import PlotLosses"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:25.593622Z",
     "start_time": "2019-01-11T04:10:25.587005Z"
    }
   },
   "outputs": [],
   "source": [
    "input_size = 2         # Input data dimensionality\n",
    "hidden_size = 3        # The number of nodes at the hidden layer\n",
    "num_classes = 2        # The number of output classes\n",
    "num_epochs = 20         # The number of times entire dataset is trained\n",
    "batch_size = 20        # The size of input data for one iteration\n",
    "learning_rate = 0.01  # The speed of convergence"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Create Data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create Random Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:25.604709Z",
     "start_time": "2019-01-11T04:10:25.595145Z"
    }
   },
   "outputs": [],
   "source": [
    "# dataset params\n",
    "N = 50000\n",
    "factor = 0.1\n",
    "noise = 0.1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:25.618415Z",
     "start_time": "2019-01-11T04:10:25.606045Z"
    }
   },
   "outputs": [],
   "source": [
    "# generate data\n",
    "X, y = make_circles(\n",
    "    n_samples=N,\n",
    "    shuffle=False,\n",
    "    factor=factor,\n",
    "    noise=noise)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create Torch Tensors"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We begin by converting the NumPy or pandas input data to torch Tensors. Conversion from and to Numpy is very straightforward:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:25.623699Z",
     "start_time": "2019-01-11T04:10:25.620146Z"
    }
   },
   "outputs": [],
   "source": [
    "X_tensor = torch.from_numpy(X)\n",
    "y_tensor = torch.from_numpy(y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:25.632090Z",
     "start_time": "2019-01-11T04:10:25.624844Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(torch.Size([50000, 2]), torch.Size([50000]))"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_tensor.shape, y_tensor.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create Torch Dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can use these PyTorch Tensor to instantiate first a TensorDataset and, in a second step, a DataLoader that includes information about batch_size:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:25.641409Z",
     "start_time": "2019-01-11T04:10:25.633129Z"
    }
   },
   "outputs": [],
   "source": [
    "dataset = utils.TensorDataset(X_tensor,y_tensor)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Define Torch DataLoader"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:25.649699Z",
     "start_time": "2019-01-11T04:10:25.643982Z"
    }
   },
   "outputs": [],
   "source": [
    "dataloader = utils.DataLoader(dataset,\n",
    "                              batch_size=batch_size,\n",
    "                              shuffle=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Build Network"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Architecture"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "PyTorch defines a NN architecture using the Net() class. The central element is the forward function. autograd automatically defines the corresponding backward function that computes the gradients. \n",
    "\n",
    "Any legal Tensor operation is fair game for the forward function, providing a log of design flexibility. In our simple case, we just link the Tensor through functional input-output relations after initializing their attributes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:25.658918Z",
     "start_time": "2019-01-11T04:10:25.652154Z"
    }
   },
   "outputs": [],
   "source": [
    "class Net(nn.Module):\n",
    "    def __init__(self, input_size, hidden_size, num_classes):\n",
    "        super(Net, self).__init__()                    # Inherited from the parent class nn.Module\n",
    "        self.fc1 = nn.Linear(input_size, hidden_size)  \n",
    "        self.logistic = nn.LogSigmoid()                          \n",
    "        self.fc2 = nn.Linear(hidden_size, num_classes)\n",
    "        self.softmax = nn.Softmax(dim=1)\n",
    "    \n",
    "    def forward(self, x):\n",
    "        \"\"\"Forward pass: stacking each layer together\"\"\"\n",
    "        out = self.fc1(x)\n",
    "        out = self.logistic(out)\n",
    "        out = self.fc2(out)\n",
    "        out = self.softmax(out)\n",
    "        return out"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:25.670157Z",
     "start_time": "2019-01-11T04:10:25.660439Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Net(\n",
       "  (fc1): Linear(in_features=2, out_features=3, bias=True)\n",
       "  (logistic): LogSigmoid()\n",
       "  (fc2): Linear(in_features=3, out_features=2, bias=True)\n",
       "  (softmax): Softmax()\n",
       ")"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "net = Net(input_size, hidden_size, num_classes)\n",
    "net"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pprint import pprint"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[Parameter containing:\n",
      "tensor([[ 0.3008, -0.2117],\n",
      "        [-0.5846, -0.1690],\n",
      "        [-0.6639,  0.1887]], requires_grad=True),\n",
      " Parameter containing:\n",
      "tensor([-0.5389,  0.2994,  0.1004], requires_grad=True),\n",
      " Parameter containing:\n",
      "tensor([[-0.5413, -0.4858,  0.5115],\n",
      "        [-0.4672,  0.0760, -0.2340]], requires_grad=True),\n",
      " Parameter containing:\n",
      "tensor([0.0005, 0.3902], requires_grad=True)]\n"
     ]
    }
   ],
   "source": [
    "pprint(list(net.parameters()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Parameter containing:\n",
       "tensor([[ 0.3008, -0.2117],\n",
       "        [-0.5846, -0.1690],\n",
       "        [-0.6639,  0.1887]], requires_grad=True)"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "list(net.parameters())[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Enable GPU"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To enable GPU processing, you can use net.cuda(). See Pytorch docs for placing Tensors on CPU and/or one or more GPU units."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:25.682016Z",
     "start_time": "2019-01-11T04:10:25.671293Z"
    }
   },
   "outputs": [],
   "source": [
    "# net.cuda()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Define Loss Function"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We also need to define a loss function and the optimizer, using some of the built-in options:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:25.690038Z",
     "start_time": "2019-01-11T04:10:25.683022Z"
    }
   },
   "outputs": [],
   "source": [
    "criterion = nn.CrossEntropyLoss()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Select Optimizer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:25.697443Z",
     "start_time": "2019-01-11T04:10:25.692058Z"
    }
   },
   "outputs": [],
   "source": [
    "optimizer = torch.optim.Adam(net.parameters(), lr=learning_rate)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train Model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Basic Training"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Model training consists in an outer loop for each epoch, i.e., each pass over the training data, and an inner loop over the batches produced by the DataLoader. That executes the forward and backward passes of the learning algorithm. Some care needs to be taken to adjust data types to the requirements of the various objects and functions, e.g. labels need to be integers and the features should be of type floats:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0\n",
      "1\n",
      "2\n",
      "3\n",
      "4\n",
      "5\n",
      "6\n",
      "7\n",
      "8\n",
      "9\n",
      "10\n",
      "11\n",
      "12\n",
      "13\n",
      "14\n",
      "15\n",
      "16\n",
      "17\n",
      "18\n",
      "19\n"
     ]
    }
   ],
   "source": [
    "for epoch in range(num_epochs):\n",
    "    print(epoch)\n",
    "    for i, (features, label) in enumerate(dataloader):\n",
    "        \n",
    "        features = Variable(features.float())         \n",
    "        label = Variable(label.long())\n",
    "\n",
    "        # Initialize the hidden weights\n",
    "        optimizer.zero_grad()  \n",
    "        \n",
    "        # Forward pass: compute output given features\n",
    "        outputs = net(features)\n",
    "        \n",
    "        # Compute the loss\n",
    "        loss = criterion(outputs, label)\n",
    "        # Backward pass: compute the gradients\n",
    "        loss.backward()\n",
    "        # Update the weights\n",
    "        optimizer.step()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Plotting losses in real time"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Below is an example that uses the `livelossplot` package to plot losses throughout the training process as provided by Keras out of the box."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:52.470265Z",
     "start_time": "2019-01-11T04:10:25.698714Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x576 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "log loss:\n",
      "training   (min:    0.313, max:    0.313, cur:    0.313)\n",
      "\n",
      "accuracy:\n",
      "training   (min:    1.000, max:    1.000, cur:    1.000)\n"
     ]
    }
   ],
   "source": [
    "liveloss = PlotLosses()\n",
    "for epoch in range(num_epochs):\n",
    "    print(epoch)\n",
    "    logs = {}\n",
    "    running_loss = 0.0\n",
    "    running_corrects = 0    \n",
    "    for i, (features, label) in enumerate(dataloader):\n",
    "        \n",
    "        features = Variable(features.float())         \n",
    "        label = Variable(label.long())\n",
    "\n",
    "        # Intialize the hidden weight to all zeros\n",
    "        optimizer.zero_grad()  \n",
    "        \n",
    "        # Forward pass: compute the output class given a image\n",
    "        outputs = net(features)\n",
    "        \n",
    "        # Compute the loss: difference between the output class and the pre-given label\n",
    "        loss = criterion(outputs, label)\n",
    "        # Backward pass: compute the weight\n",
    "        loss.backward()\n",
    "        # Optimizer: update the weights of hidden nodes\n",
    "        optimizer.step()\n",
    "        \n",
    "        _, preds = torch.max(outputs, 1)\n",
    "        running_loss += loss.detach() * features.size(0)\n",
    "        running_corrects += torch.sum(preds == label.data)\n",
    "\n",
    "        epoch_loss = running_loss / len(dataset)\n",
    "        epoch_acc = running_corrects.float() / len(dataloader.dataset)        \n",
    "        logs['log loss'] = loss.item()\n",
    "        logs['accuracy'] = epoch_acc.item()\n",
    "\n",
    "    liveloss.update(logs)\n",
    "    liveloss.draw()        "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Predict"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To obtain predictions from our trained model, we pass it feature data and convert the prediction to a Numpy array. We get softmax probabilities for each of the two classes:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:52.485684Z",
     "start_time": "2019-01-11T04:10:52.471470Z"
    }
   },
   "outputs": [],
   "source": [
    "test_value = Variable(torch.from_numpy(X)).float()\n",
    "prediction = net(test_value).data.numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:52.491291Z",
     "start_time": "2019-01-11T04:10:52.487017Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(50000, 2)"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prediction.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "From here on, we can proceed as before to compute loss metrics or visualize the result that again reproduces a version of the decision boundary we found above."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Score Prediction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:52.500652Z",
     "start_time": "2019-01-11T04:10:52.492717Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.99998"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "accuracy_score(y_true=y, y_pred=np.argmax(prediction, axis=1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Visualize Decision Boundary"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create Feature Space"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:52.505530Z",
     "start_time": "2019-01-11T04:10:52.501598Z"
    }
   },
   "outputs": [],
   "source": [
    "n_vals = 200\n",
    "x1 = np.linspace(-1.5, 1.5, num=n_vals)\n",
    "x2 = np.linspace(-1.5, 1.5, num=n_vals)\n",
    "xx, yy = np.meshgrid(x1, x2)  # create the grid"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:52.514040Z",
     "start_time": "2019-01-11T04:10:52.506433Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([40000, 2])"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_test = np.array([xx.ravel(), yy.ravel()]).T\n",
    "X_test = torch.from_numpy(X_test)\n",
    "X_test.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Predict Feature Space"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:52.529506Z",
     "start_time": "2019-01-11T04:10:52.515021Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(40000, 2)"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "zz = net(Variable(X_test).float()).data.numpy()\n",
    "zz.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:52.533749Z",
     "start_time": "2019-01-11T04:10:52.530422Z"
    }
   },
   "outputs": [],
   "source": [
    "# Create a color map to show the classification colors of each grid point\n",
    "cmap = ListedColormap([sns.xkcd_rgb[\"pale red\"],\n",
    "                       sns.xkcd_rgb[\"denim blue\"]])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Plot Decision Boundary"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-11T04:10:53.585285Z",
     "start_time": "2019-01-11T04:10:52.534541Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot the classification plane with decision boundary and input samples\n",
    "plt.contourf(xx, yy, np.argmax(zz, axis=1).reshape(n_vals, -1), cmap=cmap, alpha=.25)\n",
    "\n",
    "# Plot both classes on the x1, x2 plane\n",
    "data = pd.DataFrame(X, columns=['$x_1$', '$x_2$']).assign(Class=pd.Series(y).map({0:'negative', 1:'positive'}))\n",
    "sns.scatterplot(x='$x_1$', y='$x_2$', hue='Class', data=data, style=y, markers=['_', '+'], legend=False)\n",
    "plt.title('Decision Boundary')\n",
    "plt.savefig('boundary', dpi=300);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": true,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
